package com.demo.cookie;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet(urlPatterns = "/cookie3")
public class CookieDemo3 extends HttpServlet {
    /**
     * 记录用户上次访问的时间
     * 思路：
     * 当请求进入到当前这个程序之后，需要先获取cookie，
     * 若没有获取到cookie，说明用户是第一次访问，或者用户携带的cookie中没有记录上次访问时间的cookie
     * 若请求中携带的有相关访问记录的cookie，这时就可以获取到这个cookie中的时间，能够知道用户上次访问的时间
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("request......cookie3..........");
        resp.setContentType("text/html;charset=utf-8");
        Cookie[] cookies = req.getCookies();
        Cookie cookie = getCookie(cookies,"time");
        // 判断成立，说明用户第一次访问
        if(cookie == null){
            // 创建Cookie，并将当前的时间放到cookie中
            Cookie timeCookie = new Cookie("time",System.currentTimeMillis()+"");
            // 设置cookie的有效路径，客户端访问服务器哪些程序的时候，才让浏览器携带对应的Cookie数据
            timeCookie.setPath("/");
            // 设置cookie的生效域名(第三方Cookie)
            timeCookie.setDomain(".baidu.com");
            // 给Cookie设置过期时间（让Cookie成为持久Cookie）
            timeCookie.setMaxAge(30);
            resp.addCookie(timeCookie);
            resp.getWriter().write("欢迎您第一次访问");
        }else{
            // 说明用户不是第一次访问，而且有上次的访问时间
            String value = cookie.getValue();
            Long time = Long.parseLong(value);
            Date d = new Date(time);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String format = sdf.format(d);
            System.out.println(format);
            //Cookie timeCookie = new Cookie("time",System.currentTimeMillis()+"");
            // 修改Cookie的value值
            cookie.setValue(System.currentTimeMillis()+"");
            // 设置cookie的有效路径，客户端访问服务器哪些程序的时候，才让浏览器携带对应的Cookie数据
            cookie.setPath("/");
            // 设置cookie的生效域名(第三方Cookie)
            cookie.setDomain(".baidu.com");
            cookie.setMaxAge(30);
            resp.addCookie(cookie);
            resp.getWriter().write("您上次访问的时间是："+ format);
        }
    }
    // 根据传递的cookie的key值获取对应的cookie对象
    private Cookie getCookie(Cookie[] cookies, String name){
        // 遍历
        if(cookies == null){
            return null;
        }
        // 在循环中，根据传递的cookie的key，去判断当前遍历的某个cookie是不是记录时间的cookie
        for(Cookie c : cookies){
            if(c.getName().equals(name)){
                return c;
            }
        }
        // 循环结束，说明有cookie，但是其中没有携带时间的cookie信息
        return null;
    }
}
